/*成绩排名次（结构体数组）
　　某班期末考试科目为数学（MT）、英语（EN）和物理（PH），有最多不超过30人参加考试。考试后要求：
  （1）计算每个学生的总分和平均分；
  （2）按总分成绩由高到低排出成绩的名次；
  （3）打印出名次表，表格内包括学生编号、各科分数、总分和平均分；
  （4）任意输入一个学号，能够查找出该学生在班级中的排名及其考试分数。
*/
//计科1班  庄洵妍  140201011041


#include <stdio.h>
struct student{
	long id;
	int MT;
	int EN;
	int PH;
	int  ave;
	int sum;   // 定义变量
}s[30]; 

int main()
{
	int i, j, n, t, k, id;        //n为学生人数,id为学生学号
	printf("请输入学生人数n=");
	scanf("%d", &n);

	for (i = 0; i<n; i++){
		s[i].id = 140201 + i;
		printf("请输入学号为%d的学生数学、英语、物理成绩：", s[i].id);
		scanf("%d%d%d", &s[i].MT, &s[i].EN, &s[i].PH);
		s[i].sum = s[i].MT + s[i].EN + s[i].PH;
	}
	for (i = 0; i<n; i++){
		s[i].ave = s[i].sum / 3;
	}

	printf("——————————按学生总分成绩从高到低排序————————————\n");
	for (i = 0; i<n - 1; i++){
		for (j = i + 1; j<n; j++){
			if (s[i].sum<s[j].sum){
				t = s[i].sum;
				s[i].sum = s[j].sum;
				s[j].sum = t;
				k = s[i].id;
				s[i].id = s[j].id;
				s[j].id = k;
			}
		}
	}
	printf("学号          数学        英语      物理    总分     平均分\n");
	for (i = 0; i<n; i++){
		printf("%d         %d         %d         %d      %d      %d\n", s[i].id, s[i].MT, s[i].EN, s[i].PH, s[i].sum, s[i].ave);
	}

	printf("请输入需要查询学生的学号：");
	scanf("%d", &id);
	for (i = 0; i<n; i++){
		if (id == s[i].id)break;
	}
	if (i == n - 1)printf("没有找到该序号的学生！");
	else{
		printf("学号\t数学\t英语\t物理\t总分\t平均分\n");
		printf("%d\t%d\t%d\t%d\t%d\t%d\n", s[i].id, s[i].MT, s[i].EN, s[i].PH, s[i].sum, s[i].ave);
	}

	return 0;
}


/*请输入学生人数n=2
请输入学号为140201的学生数学、英语、物理成绩：98 99 90
请输入学号为140202的学生数学、英语、物理成绩：89 99 97
——————————按学生总分成绩从高到低排序———————
学号          数学        英语      物理    总分     平均分
140201         98         99         90      287      95
140202         89         99         97      285      95
请输入需要查询学生的学号：140201
学号    数学    英语    物理    总分    平均分
140201  98      99      90      287     95
请按任意键继续. . .
*/